/**
 *	2..请编写一个函数，删除一个字符串的一部分。函数的原型如下：
 *
 *	int del_substr(char *str,char const *substr);
 *	函数首先应该判断substr是否出现在sub中。如果它并未出现，函数就返回0;如果出现，
 *	函数应该把str中位于该子串后面的所有字符复制到该子串的位置;从而删除这个子串，
 *	然后函数返回1,如果substr在函数中出现多次，函数只删除第一次出现的子串。函数的第二个参数不能被修改。
 *
 *	举个例子，假定str指向ABCDEFG。如果substr指向FGH，CDF或XABC，函数返回0,str未作任何修改，
 *	但如果substr指向CDE，函数就把str修改为指向ABFG，方法是把FG和结尾的NUL字节复制到C的位置，
 *	然后函数返回1.不论出现什么情况，第二个参数都不能被修改。
 *
 *	a 你不应该使用任何用于操纵字符串的库函数
 *
 *	b 函数中的任何地方都不应该使用下标引用
 *
 *	一个值得注意的地方是，空字符串是每一个字符串的子串，在字符串中删除一个空字符串不会产生任何变化。
**/

#include <stdio.h>

int del_substr(char *str, char const *substr);

int main()
{
	char str[] = "ABCDEFG";
	char substr[] = "CDE";

	printf("str = %s\n", str);
	printf("substr = %s\n", substr);
	del_substr(str, substr);
	printf("str = %s\n", str);
        printf("substr = %s\n", substr);

	return 0;
}

int strcmp_n(char const *str, char const *dct, int len)
{
	while(*str && *dct && len)
	{
		if(*str != *dct)
			return 0;
		str++;
		dct++;
		--len;
	}
	return 1;
}

int strlen_n(char const *str)
{
	int count = 0;

	while(*str++)
		count++;
	return count;
}

int del_substr(char *str, char const *substr)
{
	int len = strlen_n(substr);

	while(*str)
	{
		if(strcmp_n(str, substr, len))
		{
			while(*(str+len))
			{
				*str = *(str + len);
				str++;
			}
			*str = '\0';
			return 1;
		}
		str++;
	}	

	return 0;
}
